package com.ruoyi.dictionaries.domain;

import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;

/**
 * 学籍异动申请对象 student_status_change
 * 
 * @author gdslovehy
 * @date 2025-07-17
 */
public class StudentStatusChange extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** UUID主键，唯一标识每条学籍异动记录 */
    private String id;

    /** 学生学号，关联学生基础信息表 */
    @Excel(name = "学生学号，关联学生基础信息表")
    private String studentId;

    /** 学生姓名，冗余存储便于快速查询 */
    @Excel(name = "学生姓名，冗余存储便于快速查询")
    private String studentName;

    /** 原学籍状态（正常/休学/保留学籍等） */
    @Excel(name = "原学籍状态", readConverterExp = "正=常/休学/保留学籍等")
    private String originalStatus;

    /** 异动类型（转学/休学/复学/退学/留级/转专业等） */
    @Excel(name = "异动类型", readConverterExp = "转=学/休学/复学/退学/留级/转专业等")
    private String changeType;

    /** 异动申请原因说明 */
    @Excel(name = "异动申请原因说明")
    private String changeReason;

    /** 申请提交日期 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "申请提交日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date applyDate;

    /** 申请材料清单（如：申请表/证明文件/成绩单等） */
    @Excel(name = "申请材料清单", readConverterExp = "如=：申请表/证明文件/成绩单等")
    private String applyMaterials;

    /** 材料审核状态（齐全/缺少/审核通过等） */
    @Excel(name = "材料审核状态", readConverterExp = "齐=全/缺少/审核通过等")
    private String materialsStatus;

    /** 一级审核人（如：班主任） */
    @Excel(name = "一级审核人", readConverterExp = "如=：班主任")
    private String reviewer1;

    /** 一级审核意见 */
    @Excel(name = "一级审核意见")
    private String reviewer1Opinion;

    /** 一级审核时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "一级审核时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date reviewer1Time;

    /** 一级审核结果（通过/驳回/待审核） */
    @Excel(name = "一级审核结果", readConverterExp = "通=过/驳回/待审核")
    private String reviewer1Result;

    /** 二级审核人（如：系主任） */
    @Excel(name = "二级审核人", readConverterExp = "如=：系主任")
    private String reviewer2;

    /** 二级审核意见 */
    @Excel(name = "二级审核意见")
    private String reviewer2Opinion;

    /** 二级审核时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "二级审核时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date reviewer2Time;

    /** 二级审核结果（通过/驳回/待审核） */
    @Excel(name = "二级审核结果", readConverterExp = "通=过/驳回/待审核")
    private String reviewer2Result;

    /** 三级审核人（如：教务处主任） */
    @Excel(name = "三级审核人", readConverterExp = "如=：教务处主任")
    private String reviewer3;

    /** 三级审核意见 */
    @Excel(name = "三级审核意见")
    private String reviewer3Opinion;

    /** 三级审核时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "三级审核时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date reviewer3Time;

    /** 最终审核结果（通过/驳回/待审核） */
    @Excel(name = "最终审核结果", readConverterExp = "通=过/驳回/待审核")
    private String reviewer3Result;

    /** 最终学籍状态（转学完成/休学生效/退学确认等） */
    @Excel(name = "最终学籍状态", readConverterExp = "转=学完成/休学生效/退学确认等")
    private String finalStatus;

    public void setId(String id) 
    {
        this.id = id;
    }

    public String getId() 
    {
        return id;
    }

    public void setStudentId(String studentId) 
    {
        this.studentId = studentId;
    }

    public String getStudentId() 
    {
        return studentId;
    }

    public void setStudentName(String studentName) 
    {
        this.studentName = studentName;
    }

    public String getStudentName() 
    {
        return studentName;
    }

    public void setOriginalStatus(String originalStatus) 
    {
        this.originalStatus = originalStatus;
    }

    public String getOriginalStatus() 
    {
        return originalStatus;
    }

    public void setChangeType(String changeType) 
    {
        this.changeType = changeType;
    }

    public String getChangeType() 
    {
        return changeType;
    }

    public void setChangeReason(String changeReason) 
    {
        this.changeReason = changeReason;
    }

    public String getChangeReason() 
    {
        return changeReason;
    }

    public void setApplyDate(Date applyDate) 
    {
        this.applyDate = applyDate;
    }

    public Date getApplyDate() 
    {
        return applyDate;
    }

    public void setApplyMaterials(String applyMaterials) 
    {
        this.applyMaterials = applyMaterials;
    }

    public String getApplyMaterials() 
    {
        return applyMaterials;
    }

    public void setMaterialsStatus(String materialsStatus) 
    {
        this.materialsStatus = materialsStatus;
    }

    public String getMaterialsStatus() 
    {
        return materialsStatus;
    }

    public void setReviewer1(String reviewer1) 
    {
        this.reviewer1 = reviewer1;
    }

    public String getReviewer1() 
    {
        return reviewer1;
    }

    public void setReviewer1Opinion(String reviewer1Opinion) 
    {
        this.reviewer1Opinion = reviewer1Opinion;
    }

    public String getReviewer1Opinion() 
    {
        return reviewer1Opinion;
    }

    public void setReviewer1Time(Date reviewer1Time) 
    {
        this.reviewer1Time = reviewer1Time;
    }

    public Date getReviewer1Time() 
    {
        return reviewer1Time;
    }

    public void setReviewer1Result(String reviewer1Result) 
    {
        this.reviewer1Result = reviewer1Result;
    }

    public String getReviewer1Result() 
    {
        return reviewer1Result;
    }

    public void setReviewer2(String reviewer2) 
    {
        this.reviewer2 = reviewer2;
    }

    public String getReviewer2() 
    {
        return reviewer2;
    }

    public void setReviewer2Opinion(String reviewer2Opinion) 
    {
        this.reviewer2Opinion = reviewer2Opinion;
    }

    public String getReviewer2Opinion() 
    {
        return reviewer2Opinion;
    }

    public void setReviewer2Time(Date reviewer2Time) 
    {
        this.reviewer2Time = reviewer2Time;
    }

    public Date getReviewer2Time() 
    {
        return reviewer2Time;
    }

    public void setReviewer2Result(String reviewer2Result) 
    {
        this.reviewer2Result = reviewer2Result;
    }

    public String getReviewer2Result() 
    {
        return reviewer2Result;
    }

    public void setReviewer3(String reviewer3) 
    {
        this.reviewer3 = reviewer3;
    }

    public String getReviewer3() 
    {
        return reviewer3;
    }

    public void setReviewer3Opinion(String reviewer3Opinion) 
    {
        this.reviewer3Opinion = reviewer3Opinion;
    }

    public String getReviewer3Opinion() 
    {
        return reviewer3Opinion;
    }

    public void setReviewer3Time(Date reviewer3Time) 
    {
        this.reviewer3Time = reviewer3Time;
    }

    public Date getReviewer3Time() 
    {
        return reviewer3Time;
    }

    public void setReviewer3Result(String reviewer3Result) 
    {
        this.reviewer3Result = reviewer3Result;
    }

    public String getReviewer3Result() 
    {
        return reviewer3Result;
    }

    public void setFinalStatus(String finalStatus) 
    {
        this.finalStatus = finalStatus;
    }

    public String getFinalStatus() 
    {
        return finalStatus;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("studentId", getStudentId())
            .append("studentName", getStudentName())
            .append("originalStatus", getOriginalStatus())
            .append("changeType", getChangeType())
            .append("changeReason", getChangeReason())
            .append("applyDate", getApplyDate())
            .append("applyMaterials", getApplyMaterials())
            .append("materialsStatus", getMaterialsStatus())
            .append("reviewer1", getReviewer1())
            .append("reviewer1Opinion", getReviewer1Opinion())
            .append("reviewer1Time", getReviewer1Time())
            .append("reviewer1Result", getReviewer1Result())
            .append("reviewer2", getReviewer2())
            .append("reviewer2Opinion", getReviewer2Opinion())
            .append("reviewer2Time", getReviewer2Time())
            .append("reviewer2Result", getReviewer2Result())
            .append("reviewer3", getReviewer3())
            .append("reviewer3Opinion", getReviewer3Opinion())
            .append("reviewer3Time", getReviewer3Time())
            .append("reviewer3Result", getReviewer3Result())
            .append("finalStatus", getFinalStatus())
            .append("remark", getRemark())
            .toString();
    }
}
